import socket
import threading

from loguru import logger

# 1.创建服务端套接字对象
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口复用
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 2.绑定IP地址和端口号
tcp_server_socket.bind(("", 8080))
# 3.设置监听 128：最大等待连接数
tcp_server_socket.listen(128)

# 循环等待接收客户端的连接请求
while True:
    # 4.等待接收客户端的连接请求 accept会进行阻塞等待
    conn_client_socket, addr = tcp_server_socket.accept()
    logger.info(f"客户端地址：{addr}")


    def handle_client(conn_socket):
        # 5.接收数据 recv也会进行阻塞等待
        recv_data = conn_socket.recv(1024)
        logger.info(f"接收到的数据：{recv_data.decode(encoding='gbk')}")
        # 6.发送数据
        conn_socket.send('客户端的数据我收到了'.encode(encoding='gbk'))
        # 7.关闭套接字
        conn_socket.close()


    # 当客户端和服务端建立连接成功，创建子线程，使用子线程专门处理客户端的请求，防止主线程阻塞
    t = threading.Thread(target=handle_client, args=(conn_client_socket,))
    t.start()
